home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib17.dsk / TEXTFILE EDITOR.bas < prev   
BASIC Source File  |  2023-02-26  |  5KB  |  66 lines

  1. 10  REM  **********************
  2. 20  REM  *  TEXTFILE  EDITOR  *
  3. 30  REM  *    BY KEN MANLY    *
  4. 40  REM  * COPYRIGHT (C) 1983 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * LINCOLN, MA. 01773 *
  7. 70  REM  **********************
  8. 80  REM  INITIALIZE
  9. 90  GOSUB 590:FU = 3:DR = 1: HOME : ONERR  GOTO 170
  10. 100  GOTO 270
  11. 110  REM  HIGHLIGHT AND UNHIGHLIGHT MENU SUBROUTINE
  12. 120 VT =  PEEK(37) +1:HT =  PEEK(36) +1: TEXT : VTAB  INT((FU +1)/2): HTAB 1 +20 *(FU/2 =  INT(FU/2)): PRINT FU"  "C$(FU): POKE 34,6: VTAB VT: HTAB HT: RETURN 
  13. 130  REM  MENU CHOICE OR QUIT
  14. 140  GOSUB 120: PRINT "WHICH FUNCTION (<ESC> ENDS) ";: &  GET NUM,T: ON QT GOTO 660: IF   NOT (QT +RT +SP +BS)  THEN FU = T
  15. 150  PRINT FU +SP -BS: GOTO 270
  16. 160  REM  ERROR HANDLER
  17. 170  CALL SI: ON  PEEK(222) GOTO 190,190,190,200,210,220,190,230,240,250,220,190,220,190,190
  18. 180  PRINT  CHR$(7);: POKE 216,0: GOTO 270
  19. 190  PRINT  CHR$(7)"DOS ERROR NUMBER " PEEK(222): GOTO 270
  20. 200  PRINT  CHR$(7)"DISKETTE IS WRITE-PROTECTED": GOTO 270
  21. 210  PRINT : PRINT DD$"CLOSE": GOSUB 120:FU = FU +1: GOTO 270
  22. 220  PRINT  CHR$(7)"NO SUCH TEXTFILE": GOTO 270
  23. 230  PRINT  CHR$(7)"DRIVE ERROR": GOTO 270
  24. 240  PRINT  CHR$(7)"DISK FULL": GOTO 270
  25. 250  PRINT  CHR$(7)"UNLOCK "FF$" FILE? Y" CHR$(8);: &  GET ANY,Q$: PRINT Q$: ON (QT +SP +BS) GOTO 270: IF (RT)  OR Q$ = "Y"  THEN  PRINT DD$"UNLOCK"FF$: PRINT FF$" UNLOCKED; <RETURN> TO SAVE"
  26. 260  REM  CONTROL CENTER: UPDATE FUNCTION USING FLAGS, HIGHLIGHT MENU ITEM, CALL FUNCTION SUBROUTINE
  27. 270  GOSUB 120:FU = FU +SP -BS:FU = FU +6 *(FU <1) -6 *(FU >6): INVERSE : GOSUB 120: NORMAL : PRINT "HIT <RETURN> FOR OPTION "FU; CHR$(8);
  28. 280  &  GET NUM,T: PRINT T *(T >0) +FU *(T = 0);: HTAB 1: ON (SP)  OR (BS) GOTO 270: ON (RT) GOTO 290: ON (QT) GOTO 140: GOSUB 120:FU = T -6 *(T >6) +6 *(T <1): GOTO 270
  29. 290  CALL EL: ON FU GOSUB 310,360,390,460,490,520: GOTO 270
  30. 300  REM  READ FILE
  31. 310  PRINT "DRIVE? "DR; CHR$(8);: &  GET NUM,T: PRINT (T >0) *T +(T = 0) *DR: ON (RT) GOTO 320: ON (QT +SP +BS) GOTO 340: ON (T <0  OR T >2) GOTO 310:DR = T
  32. 320  PRINT : PRINT DD$"CATALOG,D"DR
  33. 330  PRINT "FILENAME? ";: &  INPUT ANY,FF$: ON (QT +RT +SP +BS) GOTO 340: PRINT DD$"OPEN"FF$",D"DR: PRINT DD$"READ"FF$: FOR I = 1 TO 20: &  INPUT EXT,A$(I):LL = I: NEXT I: PRINT : PRINT DD$"CLOSE": GOSUB 120:FU = FU +1
  34. 340  RETURN 
  35. 350  REM  VIEW TEXT
  36. 360  ON (  NOT LL) GOTO 370: FOR I = 1 TO LL: INVERSE : PRINT  RIGHT$(" " + STR$(I),2);: NORMAL : PRINT "  "A$(I): NEXT 
  37. 370  PRINT : PRINT : RETURN 
  38. 380  REM  ADD LINE
  39. 390  ON LL = 20 GOTO 440: PRINT "AFTER WHICH LINE? "LL CHR$(8);: &  INPUT NUM,II: ON (QT +SP +BS) GOTO 430: VTAB  PEEK(37): IF RT  THEN II = LL
  40. 400 II = II +1: CALL EL: PRINT "LINE NUMBER "II: PRINT : &  INPUT ANY,TT$: IF (QT +SP +BS)  THEN 430
  41. 410  IF (II < = LL)  THEN  FOR I = LL TO II  STEP  -1:A$(I +1) = A$(I): NEXT 
  42. 420 A$(II) = TT$:LL = LL +1: PRINT : GOTO 400
  43. 430  RETURN 
  44. 440  FLASH : PRINT "FULL" CHR$(7): NORMAL : FOR I = 1 TO 1000: NEXT : GOSUB 120:SP = 0:BS = 0:FU = 2: RETURN 
  45. 450  REM  DELETE LINE
  46. 460  PRINT "WHICH LINE? ";: &  INPUT NUM,II: ON (QT +RT +SP +BS)  OR (II >LL)  OR (LL = 0) GOTO 470: FOR I = II TO LL -1:A$(I) = A$(I +1): NEXT :LL = LL -1: VTAB  PEEK(37): CALL EL: PRINT "DONE"
  47. 470  RETURN 
  48. 480  REM  EDIT LINE
  49. 490  PRINT "WHICH LINE? ";: &  INPUT NUM,II: ON (QT +RT +SP +BS) GOTO 500: HOME : VTAB 12: PRINT A$(II): VTAB 20: PRINT "USE NORMAL KEYBOARD EDITING": VTAB 12: &  INPUT EXT,A$(II)
  50. 500  HOME : RETURN 
  51. 510  REM  WRITE FILE
  52. 520  PRINT "DRIVE? ";DR; CHR$(8);: &  GET NUM,T: PRINT (T >0) *T +(T = 0) *DR: ON (RT) GOTO 530: ON (QT +SP +BS) GOTO 570: ON (T <0  OR T >2) GOTO 520:DR = T
  53. 530  PRINT "FILENAME? "FF$;: HTAB 11: &  INPUT ANY,TT$: ON (QT +SP +BS) GOTO 570: IF   NOT RT  THEN FF$ = TT$
  54. 540  PRINT DD$"OPEN"FF$",D"DR: PRINT DD$"DELETE"FF$: PRINT DD$"OPEN"FF$: PRINT DD$"WRITE"FF$
  55. 550  FOR I = 1 TO LL: PRINT A$(I): NEXT : PRINT DD$"CLOSE"
  56. 560  PRINT "LOCK FILE? N" CHR$(8);: &  GET ANY,Q$: PRINT Q$: ON (QT +RT +SP +BS) GOTO 570: IF Q$ = "Y"  THEN  PRINT DD$"LOCK"FF$
  57. 570  RETURN 
  58. 580  REM  ACTIVATE INPUT ROUTINES
  59. 590  TEXT : HOME : VTAB 12: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **": FOR R = 1 TO 2000: NEXT : PRINT  CHR$(4)"BRUNSIR"
  60. 600  REM  DEFINE VARIABLES AND MAKE MENU
  61. 610  DIM A$(20): &  DEF QT,RT,SP,BS:DD$ =  CHR$(4):EL =  -868:SI = 54915
  62. 620  TEXT : HOME : FOR FU = 1 TO 6: READ C$(FU): GOSUB 120: NEXT 
  63. 630  VTAB 4: PRINT  TAB( 6)"<SP>,<BS>-->CHANGE FUNCTION": PRINT  TAB( 12)"<ESC>-->QUIT": POKE 34,6: RETURN 
  64. 640  DATA  READ FILE ,VIEW TEXT ,ADD LINE  ,DEL LINE  ,EDIT LINE ,WRITE FILE
  65. 650  REM  END
  66. 660  TEXT : HOME : PRINT "GOODBYE": END